خرید بک لینک
فرض کنید کدی مانند زیر را در یک کامپوننت داریم و انتظار این است که با کلیک بر روی Section2، به بخش مورد نظر اسکرول شویم: @page "/test" <nav> <!-- یک روش --> <a href="#section2">Section2</a> <!-- روش دیگر --> <NavLink href="#section2">Section2</NavLink> </nav> @* ... *@ <h2 id="section2">It's Section2.</h2> @* ... *@ اما متاسفانه در Blazor Server تا نسخه فعلی آن (نسخه هفت)، این کار ساده به راحتی امکانپذیر نیست. همانطور که ملاحظه میکنید، به دو روش، نویگیشن انجام شدهاست؛ اما هیچیک ما را به هدف نمیرسانند. دلیل این موضوع، رفتار Blazor Server در بارگذاری صفحات میباشد. در حقیقت المانها موقع بارگذاری، هنوز در صفحه وجود ندارند. در واقع ابتدا نیاز است که اتصال SignalR برقرار شود و سپس دادهها از سرور دریافت شوند (مگر در حالت pre-rendered که مشکلات خاص خود را در پی دارد). برای انجام این کار دو روش وجود دارد؛ یکی بر پایهی جاوااسکریپت است و دیگری توسط توابع داخلی Blazor JS. روش جاوااسکریپتی ابتدا یک کامپوننت را به نام AnchorNavigation ایجاد مینماییم: @inject IJSRuntime JSRuntime @inject NavigationManager NavigationManager @implements IDisposable @code { protected override void OnInitialized() { NavigationManager.LocationChanged += OnLocationChanged; } protected override async Task OnAfterRenderAsync(bool firstRender) { await ScrollToFragment(); } public void Dispose() { NavigationManager.LocationChanged -= OnLocationChanged

برچسب: نویسنده: دانلودی تاريخ: يکشنبه 30 بهمن 1401 ساعت: 1:08

به ASP.NET Core 7، یک میانافزار جدید به نام Rate limiter اضافه شدهاست که امکان محدود سازی دسترسی به منابع برنامهی ما را میسر میکند. این میانافزار، طراحی جامع و مفصلی را دارد. به همین جهت نیاز است در ابتدا با مفاهیم مرتبط با آن آشنا شد و سپس به سراغ پیاده سازی و استفادهی از آن رفت. چرا باید میزان دسترسی به منابع یک برنامهی وب را محدود کرد؟ فرض کنید در حال ساخت یک web API هستید که کارش ذخیره سازی لیست وظایف اشخاص است و برای مثال از یک GET /api/todos برای دریافت لیست ظایف، یک POST /api/todos برای ثبت و یک PUT /api/todos/{id} برای تغییر موارد ثبت شده، تشکیل میشود. سؤال: چه مشکلی ممکن است به همراه این سه endpoint بروز کند؟ پاسخ: به حداقل چهار مورد زیر میتوان اشاره کرد: - یک مهاجم سعی میکند با برنامهای که تدارک دیده، هزاران وظیفهی جدید را در چند ثانیه به سمت برنامه ارسال کند تا سبب خاتمهی سرویس آن شود. - برنامهی ما در حین سرویس دهی، به یک سرویس ثالث نیز وابستهاست و آن سرویس ثالث، اجازهی استفادهی بیش از اندازهی از منابع خود را نمیدهد. با رسیدن تعداد زیادی درخواست به برنامهی ما تنها از طرف یک کاربر، به سقف مجاز استفادهی از آن سرویس ثالث رسیدهایم و اکنون برنامه، برای تمام کاربران آن قابل استفاده نیست. - شخصی در حال دریافت اطلاعات تک تک کاربران است. از شماره یک شروع کرده و به همین نحو جلو میرود. برای دریافت اطلاعات کاربران، نیاز است شخص به سیستم وارد شده و اعتبارسنجی شود؛ یعنی به ازای هر درخواست، یک کوئری نیز به سمت بانک اطلاعاتی جهت بررسی وضعیت فعلی و آنی کاربر ارسال میشود. به همین جهت عدم کنترل میزان دسترسی به لیست اطلاعات کاربران، بار سنگین

برچسب: نویسنده: دانلودی تاريخ: يکشنبه 30 بهمن 1401 ساعت: 1:08

در قسمت قبل با مفاهیم، اصطلاحات و الگوریتمهای مرتبط با میانافزار جدید Rate limiting مخصوص ASP.NET Core 7 آشنا شدیم که در پشت صحنه از امکانات موجود در فضای نام System.Threading.RateLimiting استفاده میکند. در این قسمت نحوهی استفادهی از آنرا مرور خواهیم کرد. روش افزودن میانافزار RateLimiter به برنامههای ASP.NET Core شبیه به سایر میانافزارها، جهت فعالسازی'>سازی میانافزار RateLimiter، ابتدا باید سرویسهای متناظر با آنرا به برنامه معرفی کرد و پس از فعالسازی میانافزار مسیریابی، آنرا به زنجیرهی مدیریت یک درخواست معرفی نمود. برای نمونه در مثال زیر، امکان دسترسی به تمام درخواستها، به 10 درخواست در دقیقه، محدود میشود که پارتیشن بندی آن (در مورد پارتیشن بندی در قسمت قبل بیشتر بحث شد)، بر اساس useame کاربر اعتبارسنجی شده و یا hostname یک کاربر غیراعتبارسنجی شدهاست: var builder = WebApplication.CreateBuilder(args); builder.Services.AddRateLimiter(options => { options.GlobalLimiter = PartitionedRateLimiter.Create<HttpContext, string>(httpContext => RateLimitPartition.GetFixedWindowLimiter( partitionKey: httpContext.User.Identity?.Name ?? httpContext.Request.Headers.Host.ToString(), factory: partition => new FixedWindowRateLimiterOptions { AutoReplenishment = true, PermitLimit = 10, QueueLimit = 0, Window = TimeSpan.FromMinutes(1) })); }); // ... var app = builder.Build(); // ... app.UseRouting(); app.UseRateLimiter(); app.Map

برچسب: نویسنده: دانلودی تاريخ: يکشنبه 30 بهمن 1401 ساعت: 1:08

بررسی سیستم عامل های مختلف برای برنامه'>برنامه نویسی'>نویسیامروزه دعوا بر سرِ بهتر بودن سیستم عاملهای مختلف برای برنامه نویسی، زیاد است و هر شخصی بر اساس سلیقه شخصی و تجربیات خودش، در مورد انتخاب سیستم عامل مناسب برای برنامه نویسی نظر میدهد؛ اما در آخر، این خود شما هستید که باید سیستم عامل مخصوص خود را برای برنامه نویسی با رعایت چند نکته انتخاب کنید.  بسیاری از افرادی که به تازگی قصد شروع برنامه نویسی را دارند و یا میخواهند سیستم عامل خود را تغییر دهند، این سوال برایشان پیش میآید که چه سیستم عاملی برای برنامه نویسی مناسب است؟ امروزه برنامه نویسان میتوانند از سه سیستم عاملِ مک، ویندوز یا لینوکس برای کدنویسی استفاده کند. لازم به ذکر است که برای انتخاب سیستم عامل مناسب برنامه نویسی، باید در ابتدا نیازها و مهارت های خود را در برنامه نویسی در نظر بگیرید و سپس این نیازها را با ویژگیهای سیستم عاملهای مختلف تطبیق دهید. در این مقاله از شرکت نرم افزاری وب نگاه، به بررسی نکاتی که باید در انتخاب سیستم عامل رعایت کنید، میپردازیم. در ادامه با ما همراه باشید. بودجه  بودجه یا همان پولی که برای خرید سیستم در نظر دارید، میتواند در انتخاب سیستم عامل برای برنامه نویسی تاثیرگذار باشد. باید گفت هزینهای که باید برای استفاده از سه سیستم عاملِ مک، ویندوز یا لینوکس صرف کنید، با یکدیگر متفاوت است. استفاده و نصب سیستم عامل لینوکس بر روی دستگاه، رایگان است؛ اما اگر این سیستم عامل به طور پیشفرض بر روی سیستمی که شما قصد خرید آن را دارید نصب شده باشد، شما نیازمند پرداخت هزینه بیشتری برای آن هستید. در موقعیتی مشابه، اگر قصد خرید دستگاهی با سیستم عامل ویندوز را داشته باشید، باید هزینه کمتری را پرداخت کن

برچسب: نویسنده: دانلودی تاريخ: چهارشنبه 26 بهمن 1401 ساعت: 14:15

آینده هوش مصنوعی'>مصنوعی با پیشرفت هوش مصنوعیامروزه هوش مصنوعی در جهان غوغای بزرگی به پا کرده است و تقریبا تمام افراد در حال صحبت کردن از هوش مصنوعی هستند. با روی کار آمدن چتباتهای مختلف مانند chatGPT، گروههای مختلفی از افراد که در حوزه تکنولوژی کار میکنند، نگران از دست رفتن شغلشان شدند.  یکی از این گروهها، برنامهنویسان بودن؛ زیرا چتجیپیتی این امکان را دارد تا با گرفتن دستور و ایده شما، برنامه مورد نظر شما را با زبانهای مختلفی مانند پایتون یا جاوا اسکریپت بنویسد و آن را اجرا کند. لازم به ذکر است که این ربات نه تنها میتواند برنامههای مختلف بنویسد، بلکه توانایی رفع اشکالات برنامه هم دارد و میتواند در کمتر از چند ثانیه این کار را انجام دهد و این موضوع، نگرانی بزرگی را در دل برنامهنویسان ایجاد کرده است. در این مقاله از شرکت نرم افزاری وب نگاه، به بررسی امکان جایگزینی هوش مصنوعی با برنامهنویسان میپردازیم و این موضوع را از جهتهای مختلف بررسی میکنیم.  چالشهای برنامه نویسی به طور کلی، نمیتوان درباره جایگزینی هوش مصنوعی با انسان به طور قطعی نظر داد؛ لذا شما باید اطلاعات مربوط به این حوزه را مطالعه کنید تا خودتان بتوانید با تفکر به نتیجه مناسبی برسید.  یکی از اطلاعات مهمی که باید آن را درباره جایگزینی هوش مصنوعی با برنامه نویسان بررسی کنید، چالشهای برنامه نویسی است. شما میتوانید با بررسی چالشهای برنامه نویسی و تطبیق آنها با تواناییهای هوش مصنوعی، درباره جایگزینی هوش مصنوعی با برنامه نویسان به نتایج جالبی برسید.  فهم نیاز کاربر و ایجاد ارتباط برای پروژه فهم نیاز کاربر از برنامه و تطبیق آن با رابط کاربری و تیم توسعهدهنده، یکی از بزرگترین چالشهای

برچسب: نویسنده: دانلودی تاريخ: چهارشنبه 26 بهمن 1401 ساعت: 14:15

 در برنامههای Blazor Server، تنها از یک نخ رابط کاربری واحد ( single UI thread ) استفاده نمیشود؛ بلکه هر نخی که در دسترس باشد، میتواند در موقع رندر، استفاده شود. علاوه بر این اگر از عملیات نامتقارن استفاده شود، زمانیکه به کلمهی کلیدی await میرسیم، آنگاه نخ اختصاص داده شدهی برای ادامه پردازش متد، ممکن است لزوما همان چیزی نباشد که آن را شروع کرده است. برای نشان دادن این موضوع مثالی را در پیش میگیریم. کامپوننتی را با نام  SynchronousInitComponent با کد زیر درنظر میگیریم. همانطور که از اسم آن مشخص است این کامپوننت به صورت متقارن یا همزمان پیادهسازی شده است: <p>Sync rendered by thread @IdOfRenderingThread</p> @code { int IdOfRenderingThread; protected override void OnInitialized() { base.OnInitialized(); IdOfRenderingThread = System.Threading.Thread.CurrentThread.ManagedThreadId; } } در حقیقت در متد OnInitialized آن، مقدار نخ جاری را توسط Thread.ManagedThreadId به دست میآوریم. بنابراین شماره نخ جاری پس از رندر شدن کامپوننت، در صفحه نمایش داده میشود. حال در کامپوننت دیگری برای مثال کامپوننت index، کامپوننت همزمان فوق را به شکل زیر فراخوانی میکنیم: @page "/" <h1>Components with synchronous OnInitialized()</h1> @for (int i = 0; i < 5; i++) { <SynchronousInitComponent /> } با این نتیجه: Components with synchronous OnInitialized() Sync rendered by thread 4 Sync rendered by thread 4 Sync rendered by thread 4 Sync rendered by thread 4 Sync rendered by thread 4 همانطور که ملاحظه مینمایید شناسه ن

برچسب: نویسنده: دانلودی تاريخ: چهارشنبه 26 بهمن 1401 ساعت: 14:15

1094 بازدید دسته بندی: IELTS Assessed Samples - Writing منتشر شده در 2 بهمن 1401 زمان مطالعه: 2 دقیقه 0 نظر به روز شده در 2 بهمن 1401 نمونه تصحیح شده رایتینگ آیلتس تسک یک آکادمیک'>آکادمیک توسط آکادمی اکسیر – شماره 29 – نمره 7 داوطلب گرامی، زبان آموز اکسیری عزیز سلام،در زیر یک نمونه رایتینگ تصحیح شده به همراه جزئیات برای شما گذاشته شده است. حتما به نمره تک تک معیارها مثل LR و GRA دقت کنید.اگر نمیدانید بر چه اساسی رایتینگ آیلتس تصحیح میشود، می توانید لینک زیر را ببینید. نمونه رایتینگ نوشته شده توسط متقاضیان اکسیر آیلتس جدول نمرات این نمونه تصحیح شده رایتینگ آیلتس توسط آکادمی اکسیر توضیحات شفاهی و تحلیل کامل نمونه تصحیح شده رایتینگ آیلتس توسط آکادمی اکسیر https://dl.exiracademy.org/WebsiteMaterial/Writing%20Sample%20Audio%20Files/WT1AC/%D8%B1%D8%A7%DB%8C%D8%AA%DB%8C%D9%86%DA%AF%2B%D8%AA%D8%B3%DA%A9%2B%DB%B1%2B%D8%A2%DA%A9%2B%D8%A7%DA%A9%D8%B3%DB%8C%D8%B1%2B%D8%A2%DB%8C%D9%84%D8%AA%D8%B3%2B%D8%AF%2B%D8%A7%2B%DB%B8.ogg لینک های مفید: نمونه های تصحیح شده رایتینگ آیلتس نمونه های تصحیح شده اسپیکینگ آیلتس آموزش رایگان آیلتس – Lea IELTS for Free پنالتی های رایتینگ آیلتس شرکت در ماک آیلتس اکسیر شرکت در کلاس های گروهی اکسیر آیلتس شرکت در دوره آفلاین اکسیر آیلتس تهیه پکیج جامع اکسیر آیلتس شرکت در تعیین سطح زبان عمومی درخواست مشاوره آیلتس ایده های رایتینگ و اسپیکینگ آیلتس بهترین منابع خودآموزی

برچسب: نویسنده: دانلودی تاريخ: چهارشنبه 26 بهمن 1401 ساعت: 14:15

980 بازدید دسته بندی: IELTS Assessed Samples - Writing منتشر شده در 10 بهمن 1401 زمان مطالعه: 1 دقیقه 0 نظر به روز شده در 10 بهمن 1401 نمونه تصحیح شده رایتینگ آیلتس تسک دو توسط آکادمی اکسیر – شماره 28 – نمره 4.5 داوطلب گرامی، زبان آموز اکسیری عزیز سلام،در زیر یک نمونه رایتینگ تصحیح شده به همراه جزئیات برای شما گذاشته شده است. حتما به نمره تک تک معیارها مثل LR و GRA دقت کنید.اگر نمیدانید بر چه اساسی رایتینگ آیلتس تصحیح میشود، می توانید لینک زیر را ببینید. نمونه رایتینگ نوشته شده توسط متقاضیان اکسیر آیلتس جدول نمرات این نمونه تصحیح شده رایتینگ آیلتس توسط آکادمی اکسیر توضیحات شفاهی و تحلیل کامل نمونه تصحیح شده رایتینگ آیلتس توسط آکادمی اکسیر https://dl.exiracademy.org/WebsiteMaterial/Writing%20Sample%20Audio%20Files/WT2/%D8%B1%D8%A7%DB%8C%D8%AA%DB%8C%D9%86%DA%AF%2B%D8%AA%D8%B3%DA%A9%2B%DB%B2%2B%D8%A7%DA%A9%D8%B3%DB%8C%D8%B1%2B%D8%A2%DB%8C%D9%84%D8%AA%D8%B3%2B%D8%AD%2B%D8%AB%20%281%29.ogg لینک های مفید: نمونه های تصحیح شده رایتینگ آیلتس نمونه های تصحیح شده اسپیکینگ آیلتس آموزش رایگان آیلتس – Lea IELTS for Free پنالتی های رایتینگ آیلتس شرکت در ماک آیلتس اکسیر شرکت در کلاس های گروهی اکسیر آیلتس شرکت در دوره آفلاین اکسیر آیلتس تهیه پکیج جامع اکسیر آیلتس شرکت در تعیین سطح زبان عمومی درخواست مشاوره آیلتس تماس با اکسیر 4.7/5 - (4

برچسب: نویسنده: دانلودی تاريخ: چهارشنبه 26 بهمن 1401 ساعت: 14:15

متاورس دنیایی دیجیتالی با قابلیت های فراوان برای سود سازی و ایجاد درآمد می باشد این دنیای متاورسی به وجود آمده که مارا از قید و بند دنیای فیزیکی ازاد کرده و به بی نهایت قابلیت و ویژگی مهم متصل کند اما آنچه امروزه از متاورس وجود دارد و برای ما نیز بسیار جذاب است پروژه های متنوع این دنیا با امکان کسب درآمد های دلاری بسیار بدون سرمایه اولیه است با ما همراه باشید با اشنایی کامل با قابلیت های بسیار این دنیا برای داشتن یک درآمد دلاری رایگان! در ادامه مقاله به آموزش مهمترین مفاهیم متاورس میپردازیم و بهترین آموزشگاه برای آموزش متاورس و کسب درآمد دلاری از متاورس را به شما پیشنهاد میدهیم، همراه ما باشید. متاورس چیست؟ دنیای متاورس به لطف فناوری بلاک چین است که روزبهروز درحالتوسعه است و قطعاً آینده متعلق به متاورس خواهد حال اگر شما هم میخواهید سهمی از این آینده داشته باشید، امروز باید دستبهکار شوید و درباره متاورس اطلاعات جامع و صحیحی کسب کنید. متاورس (Metaverse) از دو کلمه Meta به معنای برتر- فرا و Verse به معنای جهان است بنابراین میتوان آن را فراجهان نامید. نامی که بسیار برازنده آن است. واژه متاورس اولین بار سالها قبل توسط نیل استفنسون در رمان سقوط برفی استفاده شد و توسط بازیهای مختلف و فیلمهای سینمایی به دنیا معرفی شد؛ اما از آنجایی که بستر مناسبی برای پیشرفت آن وجود نداشت، رشد و توسعه آن تا همین چند سال گذشته به تأخیر افتاد. متاورس یک دنیای سهبعدی است که برای متصل شدن به آن احتیاج به اینترنت داریم تنها همین! اما اینکه در کدام بخشهای متاورس سرمایهگذاری کنیم. برای کسب اطلاعات جامع راجع به «چیستی متاورس» و «تاریخچه متاورس» عبارت “همه چیز در مورد کسب

برچسب: نویسنده: دانلودی تاريخ: چهارشنبه 26 بهمن 1401 ساعت: 14:15

در حالی که گوشیهای هوشمند نقش مهمی را برای افراد ایفا میکنند، شرکتها در ادغام گجتهای موبایل در کارهای روزانهشان کند بودهاند. به لطف برنامههای CRM تلفن همراه که کسبوکارها از آنها برای پاسخگویی به تقاضاها و عدم تحت فشار قرار گرفتن استفاده میکنند، دیگر اینطور نیست. اما سرمایه گذاری در یک اپلیکیشن CRM موبایل چگونه می تواند به کسب و کار شما کمک کند؟ در اینجا دلایل قانع کننده ای وجود دارد که چرا باید امروز در یک برنامه CRM تلفن همراه سرمایه گذاری کنید. شرکت برنامه نویسی وب نگاه  در توسعه بیش از 3500 طراحی اپلیکیشن iOS و اندروید تجربه دارد. بنابراین، اگر به دنبال طراحی اپلیکیشن موبایل  هستید که به کسب درآمد کمک می کند، با ایده اپلیکیشن خود با ما تماس بگیرید. دریافت مشاوره رایگان از کارشناسان ما را از دست ندهید. 09339017809 CRM موبایل به چه معناست؟ Mobile CRM نرم افزار CRM قانونی است که برای دستگاه های تلفن همراه مانند تبلت ها و گوشی های هوشمند طراحی شده است. با CRM، نمایندگان فروش و کارگران میدانی شما می توانند به اطلاعات مهم دسترسی پیدا کنند، به عنوان مثال. ب. داده های مشتری، دسترسی و مدیریت آنها. به لطف انعطاف پذیری CRM موبایل، کسب و کار شما از فروش بالاتر، روابط تجاری بهتر و مدیریت بهتر مشتری بهره مند خواهد شد. همچنین به شما کمک می کند تا بدون نیاز به حضور در دفتر، برند خود را بهتر بازاریابی کنید. شرکت وب نگاه به عنوان یکی از شرکت های نرم افزاری با بیش از 20 سال سابقه فعالیت در حوزه برنامه نویسی ، فعالیت خود را به صورت تخصصی در برنامه نویسی و ارایهی راهکارهای نرم افزاری مبتنی بر وب متمرکز نمود . جهت اطلاع از تعرفه طراحی اپلیکیشن موبایل و مشاوره رایگان با ما

برچسب: نویسنده: دانلودی تاريخ: جمعه 21 بهمن 1401 ساعت: 8:03

راههای موفقیت اپلیکیشن اندروید در گوگل پلییک برنامه اندروید میتواند دنیا را تغییر دهد زیرا ترکیبی از فناوری و تجارت است. خوش به حالت. اما بیش از 1.3 میلیون برنامه در Google Play وجود دارد. این بدان معناست که مهم نیست برنامه شما چقدر عالی است، به اندازه توانایی شما برای متقاعد کردن مردم برای دانلود آن خوب است. و اگر میخواهید برنامه خود را برای همه در دسترس قرار دهید، کونگ فوی Google Play خود را با سرعت کامل بالا ببرید. بنابراین چگونه میتوانید در میان جمعیت Google Play متمایز شوید؟ در زیر نکاتی وجود دارد که با شما به اشتراک می گذاریم! شرکت وب نگاه در توسعه و طراحی اپلیکیشن iOS و اندروید تجربه دارد. بنابراین، اگر به دنبال طراحی اپلیکیشن موبایل هستید که به کسب درآمد کمک می کند، با ایده اپلیکیشن خود با ما تماس بگیرید. دریافت مشاوره رایگان از کارشناسان ما را از دست ندهید. 09339017809 1. مراقب لینک های خود باشید نحوه قالب بندی پیوندهای برنامه شما در Google Play می تواند تفاوت زیادی ایجاد کند. اکثر مجریان Google Play از عبارت “فروشگاه Google Play” یا “Play Link” استفاده می کنند. اگر بتوانید از هر کسی که در مورد شما می نویسد بخواهید متن لنگر را تغییر دهد، می تواند بسیار مفید باشد. متن لنگر خوب با کلمات کلیدی مناسب از منبع قابل اعتمادی مانند TechCrunch یا Wired می تواند برنامه شما را حتی قبل از چند نصب اول رتبه بندی کند. هنگام صحبت با وبلاگ نویسان، سعی کنید آنها را متقاعد کنید که هنگام پیوند دادن به برنامه شما از اصطلاحات قانع کننده و توصیفی استفاده کنند. 2. از عناوین “cute” اجتناب کنید از شش میلیون عبارت منحصربهفرد که هر ماه در گوگل پلی جستجو میشوند، بیش از نیمی از آنها غلط ام

برچسب: نویسنده: دانلودی تاريخ: جمعه 21 بهمن 1401 ساعت: 8:03

امروزه با توجه به توسعه برندهای تولیدکننده گوشیهای هوشمند در جهان، در این بازار تنوع بسیار زیادی وجود دارد و گاهی اوقات، این تنوع میتواند انتخابهای ما را سخت کند. اگر به دنبال یک گوشی موبایل هوشمند با امکانات فوق العاده میگردید، گوشیهای سامسونگ s23 اولترا و آیفون 14 پرومکس میتوانند انتخاب مناسبی برای شما باشند. برای خرید یک گوشی هوشمند مناسب، ابتدا باید شرایط و نیازهای خود را در نظر بگیرید و سپس به مقایسه گوشیهای هوشمند موجود در بازار بپردازید. در این مقاله از شرکت نرم افزاری وب نگاه، به بررسی و مقایسه دو گوشی سامسونگ گلکسی s23 ultra و آیفون 14 پرومکس خواهیم پرداخت. در ادامه با همراه باشید.  مقایسه سیستم عامل گوشی آیفون 14 پرومکس با سامسونگ s23 اولترا دو گوشی آیفون 14 پرومکس و سامسونگ گلکسی s23 ultra، دارای دو سیستم عامل متفاوت هستند. گوشی آیفون 14 پرومکس از سیستم عامل IOS 16 برخوردار است و گوشی سامسونگ S23 ultra از سیستم عامل اندروید 13 بهره میبرد. اگر شما تا به الان از سیستم عامل اندروید استفاده کرده باشید، ممکن است کار با آیفون 14 پرومکس برای شما کمی سخت باشد و سامسونگ گلکسی s23 ultra را ترجیح دهید. لازم به ذکر است که سیستم عاملهای این دو گوشی، تا 5 سال بهروز میمانند و شما به هیچ وجه نیاز ندارید تا نگران قدیمی شدن سیستم عامل گوشی خود باشید.  مقایسه دوربین گوشی آیفون 14 پرومکس با سامسونگ s23 ultra میتوان گفت یکی از مهمترین فاکتورها برای انتخاب یک گوشی هوشمند، دوربین آن است. دوربین اصلی گوشی سامسونگ گلکسی s23 ultra از سنسور 200 مگاپیکسلی برخوردار است که وضوح و کیفیت بسیار بالایی دارد. دوربین اصلی آیفون 14 پرومکس نیز دارای سنسور 48 مگاپیکسلی است و

برچسب: نویسنده: دانلودی تاريخ: جمعه 21 بهمن 1401 ساعت: 8:03

توسط ماژولها میتوانیم یک مجموعه از دستورات را گروهبندی کنیم و تحت عنوان یک پکیج ارائه دهیم که برای دیگران نیز قابل استفاده باشند. برای ایجاد یک ماژول کافی است اسکریپتهای خود را درون یک فایل با پسوند psm1 قرار دهیم؛ به این فایل اصطلاحاً root module گفته میشود. در واقع میتوان گفت ماژولها یک روش مناسب برای به اشتراکگذاری اسکریپتها میباشند. تا اینجا با کمک پروفایلها توانستیم امکان استفاده مجدد از توابع و اسکریپتها را داشته باشیم؛ ماژولها نیز یک روش دیگر برای بارگذاری اسکریپتها درون شل هستند. زمانیکه شل را باز میکنیم PowerShell به صورت خودکار یکسری مسیر را برای بارگذاری ماژولها اسکن میکند. توسط متغیر env:PSModulePath$ میتوانیم لیست این مسیرها را ببینیم:   PS /> $env:PSModulePath -Split ":" /Users/sirwanafifi/.local/share/powershell/Modules /usr/local/share/powershell/Modules /usr/local/microsoft/powershell/7/Modules همانطور که عنوان شد برای ایجاد یک ماژول کافی است اسکریپتهای خود را داخل یک فایل با پسوند psm1 ذخیره کنیم. به عنوان مثال میتوانیم تابع Get-PingReply را درون یک فایل با نام PingModule.psm1 ذخیره و سپس توسط دستور Import-Module ماژول را ایمپورت کنیم:   PS /> Import-Module ./PingModule.psm1 سپس توسط دستور Get-Module PingModule میتوانیم جزئیات ماژول ایمپورت شده را مشاهده نمائیم:  PS /> Get-Module PingModule ModuleType Version PreRelease Name ExportedComma

برچسب: نویسنده: دانلودی تاريخ: جمعه 21 بهمن 1401 ساعت: 8:03

شاید این جمله را شنیده باشید: “جهان امروز، جهان اطلاعات است.” همانطور که این جمله به ما میگوید، امروزه در جهانی زندگی میکنیم که سرشار از اطلاعات و داده است و هر روز به مقدار آنها افزوده میشود. با مقدار زیاد اطلاعات و دادهای که در جهان امروز وجود دارد، گرایش کسب و کارها و بیزینسها به سمت استفاده از پایگاههای داده رفته است. کسب و کارها اغلب برای مدیریت بهینهی سیل عظیم دادههایشان، از پایگاه داده استفاده میکنند. مونگو دیبی (mongo DB) نیز یک پایگاه داده nosql است. در این مقاله از شرکت نرم افزاری وب نگاه به بررسی مفهوم پایگاه داده، پایگاه داده مونگو دیبی و کاربردهای آن میپردازیم. در ادامه با ما همراه باشید. پایگاه داده چیست؟ قبل از اینکه به سراغ بررسی مونگو دیبی برویم، شما نیازمندید تا با مفهوم پایگاه داده، آشنایی کامل داشته باشید. اگر بخواهیم پایگاه داده را به زبان ساده بیان کنیم، میتوانیم بگوییم که پایگاه داده شامل ذخیره و دستهبندی اطلاعات، در جهت دسترسی و مدیریت بهترِ آنها است. یک پایگاه داده دارای مجموعهای از جدول ها است که اطلاعات را بر اساس نوع آنها، در سطرهای مختلف دستهبندی میکند. بگذارید این مفهوم را با یک مثال برای شما توضیح دهیم: فرض کنید که شما یک فروشگاه دارید و نام و شماره تلفن هر فردی که از شما خرید میکند را مینویسید. حال میتوانید دفتر یا فایلی که اطلاعات مشتریها را در آن ذخیره میکنید، یک پایگاه داده بدانید. طبق توضیحی که از پایگاه داده ارائه شد، شما در دفترتان، نام و شماره تلفن هر فردی را در سطرهای مختص به آنها مینویسید.  پایگاه داده nosql چیست؟ یک پایگاه داده nosql در سطح بالاتر و وسیعتری از پایگاه داده sql کار میکند و بسیار گستر

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

دنیای هوش مصنوعی روز به روز در حال پیشرفت است و این موضوع میتواند تا حدودی انسانها را بترساند. یکی از معروفترین تکنولوژیهای مبتنی بر هوش مصنوعی که به تازگی به نمایش گذاشته شده است، chatGPT است و اگر در فضای وب فعالیت میکنید، امکان ندارد که اسم chatGPT به گوش شما نخورده باشد. امروزه این تکنولوژی باعث نگرانی خیلی از افراد شده است و برخی نگران از دست رفتن شغلشان به واسطه این ربات هستند. در این مطلب از شرکت نرمافزاری وب نگاه، به بررسی کامل چت GPT، کاربردها و مزایا و معایب آن میپردازیم تا شما دیدی بهتر نسبت به آینده این ربات و هوش مصنوعی پیدا کنید. در ادامه با ما همراه باشید.  چت GPT چیست؟  به طور کلی chatGPT یک ربات چت (chat bot) مبتنی بر هوش مصنوعی است که توسط مجموعه openAI ساخته و عرضه شده. این ربات، توان این را دارد که به هر سوالی که از او میپرسید پاسخ دهد و هر کار مرتبط با تکنولوژی را در فضای وب انجام دهد. اگر بخواهیم به زبان دیگر مفهوم چت جی چی تی را توضیح دهیم، میتوانیم بگوییم chatGPT نوعی مدل زبانی بزرگ (large language model) است که با استفاده از مقدار زیادی داده آموزش میبیند تا بتواند به سوالات مختلفی در زمینههای متفاوت پاسخ داده و کارهای بیشتری را انجام دهد. شاید فکر کنید چت جیپیتی یک ربات چت ساده مانند گوگل است؛ اما مسئله فراتر از این موضوعات است! چت GPT قادر است تا برنامههایی با زبانهای مختلف بنویسد، طراحی اپلیکیشن انجام دهد، مسائل پیچیده ریاضی را حل کند و تولید محتوای متنی انجام دهد! البته در حال حاضر، تمام این فعالیتها به درستی توسط این ربات انجام نمیشوند؛ اما در آیندهای نه چندان دور، میتوانیم شاهد وقوع پیشرفتهایی در این حوزه باشیم

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

میتوان دو مورد از پرطرفدارترین استاندارهای طراحی API را REST و graphQL دانست. در گذشته REST محبوبترین استاندارد طراحی API بود؛ اما با ورود graphQL، چالش اصلی برنامهنویسان انتخاب یکی از این دو معماری شد. باید گفت، برای اینکه ما بتوانیم معماریهای طراحی API را انتخاب کنیم، ابتدا نیاز است تا نیازها و فعالیت خودمان را بسنجیم و سپس به بررسی مزایا و معایب آنها بپردازیم. در این مقاله از شرکت نرم افزاری وب نگاه، به بررسی مفهوم و مقایسه REST و graphQL و مزایا و معایب آنها میپردازیم. در ادامه با ما همراه باشید.API چیست؟ قبل از اینکه به مفهوم graghQL و REST بپردازیم، نیاز است تا با مفهوم API آشنا شوید. API مخفف عبارت Application Programming Interface است که به معنای رابط برنامه نویسی اپلیکیشن است.  اگر بخواهیم کاربرد API را به زبان ساده توضیح دهیم، میتوانیم بگوییم که API ها کتابخانه یا ابزارهایی هستند که به برنامه نویسان امکان نوشتن یک کد و ارتباط آن با دیگر نرمافزارها را ارائه میدهد.  برنامه نویسان میتوانند از API برای اتصال یک اپلیکیشن به سرور سایت در جهت خواندن دادهها استفاده کنند که به این تکنولوژی WEBAPI میگویند؛ یعنی دادهها همزمان در فضای وب و یک یا چند اپلیکیشن نمایش داده میشوند.  برای مثال فرض کنید که شما اپلیکیشن یک فروشگاه آنلاین را نصب میکنید و میتوانید در آن، دادههایی مانند عکس محصولات، نظرات کاربران، ویدیوهای بررسی محصولات و درگاههای بانکی را مشاهده کنید. شاید با خود فکر کنید که چگونه این حجم از اطلاعات که نیاز به فضای چند گیگی دارند، در یک اپلیکیشن 30 مگابایتی نمایش داده میشوند؟  پاسخ این است که در این روش از طراحی اپلیکیشن، این داده

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

همه ما با DisplayAttribute در DataAotaion آشنا هستیم. چیزی شبیه زیر برای یک موجودیت: public class Student{ [Display(Name="نام خانوادگی")] public string FamilyName { get; set;} } با استفاده از tag helper ای به نام asp-for میتوان متادیتای Name را به کاربر، در سمت رابط کاربری نشان داد؛ برای مثال: <label asp-for="FamilyName"></label> و یا موقع اعتبارسنجی میتوان به جای نشان دادن نام FamilyName از نام مفهومتری مانند نام خانوادگی استفاده نمود. چه خوب بود اگر میشد علاوه بر نام، توصیفی از فیلد نیز برای آن در این قسمت وجود داشته باشد؛ به عبارت دیگر اگر کد زیر را داشتیم: [Display( Name = "نام خانوادگی", Description = "بهتر است فقط در اینجا نام خانوادگی شخص وارد شود")] public string FamilyName{ get; set; } بتوان از tag helper ای مانند زیر استفاده نمود: <span asp-description-for="FamilyName"></span> که در نهایت چنین خروجی html ای داشته باشیم: <span>بهتر است فقط در اینجا نام خانوادگی شخص وارد شود</span> برای این منظور میتوان از کلاس زیر بهره برد: using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; [HtmlTargetElement("div", Attributes = ForAttributeName)] [HtmlTargetElement("p", Attributes = ForAttributeName)] [HtmlTargetElement("span", Attributes = ForAttributeName)] public sealed class DescriptionForTagHelper : TagHelper { private const string ForAttributeName = "asp-description-for"; [HtmlAttributeName(ForAttributeName)]

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

رشتهها، یکی از عمومیترین نوعهای دادهها هستند؛ از آنها در تعریف آدرسهای اینترنتی، عبارات باقاعده و یا حتی زمانها و تاریخها استفاده میکنیم. در دات نت 7 میتوان با استفاده از ویژگی جدید StringSyntaxAttribute، به این نوعهای مختلف اندکی معنا بخشید. معرفی ویژگی جدید StringSyntax با استفاده از ویژگی StringSyntax جدید میتوان مقدار مورد انتظار از رشتهی درخواستی را معنادار کرد. برای مثال، Visual Studio سالهاست که راهنمایی را در حین تعریف عبارات باقاعده ظاهر میکند. اما این راهنما صرفا مختص به ویژوال استودیو است و تا پیش از این راهی وجود نداشت تا عنوان کنیم که برای مثال این رشته قرار است تنها یک عبارت باقاعده باشد. اکنون در دات نت 7 با معرفی ویژگی جدید StringSyntax میتوان یک چنین intellisense ای را در سایر IDEها نیز شاهد بود. برای نمونه مثال زیر را درنظر بگیرید: using System.Diagnostics.CodeAnalysis; namespace CS11Tests; public class StringSyntaxAttributeTests { public static void Test() { RegexTest(""); DateTest(""); } private static void RegexTest([StringSyntax(StringSyntaxAttribute.Regex)] string regex) { } private static void DateTest([StringSyntax(StringSyntaxAttribute.DateTimeFormat)] string dateTime) { } } در اینجا با استفاده از ویژگی StringSyntax، دقیقا مشخص کردهایم که هدف از تعریف پارامترهای رشتهای مدنظر چه چیزی بودهاست. به این ترتیب، برای مثال در Rider، در حین استفاده از این متدها، به intellisenseهای زیر خواهیم رسید: راهنمای ظاهر شده جهت تعریف سادهتر عبارات باقاعده:

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

زمانیکه تصمیم میگیریم کدهای زده شده را بهینه کنیم، اکثرا دنبال راه حلهای جدید نمیگردیم. این مورد کاملا غریزی است؛ چرا که بهدنبال کمترین انرژی و بیشترین بازدهی هستیم؛ این طبیعت انسان است. صرفا کدهای قبلی را بازبینی میکنیم و سعی میکنیم  نحوهی نوشتن منطقهای موجود را بهینه کنیم. در همین راستا درک عملکرد Task و ValueTask ها شاید قدمی مهم در مورد بهینه کردن کدها باشد؛ چرا استفاده درست و بجای این دو مورد میتواند تاثیر زیادی بر روی سرعت و استفاده از مصرف حافظه داشته باشد؟ در این مقاله سعی میکنیم تا درک درستی از این دو داشته باشیم. Task<T>  چیست؟ Task یک کلاس در فضای نام System.Threading.Tasks است؛ بهطوریکه کمک میکند تا یک قسمت از برنامه به صورت مستقل از Thread اصلی اجرا شود. بهبیان دیگر میتواند یک Thread Pool را ایجاد و با توجه به روند کار، از یک مرحلهی اجرایی به مرحلهای دیگر منتقل میکند. همچنین هر Task میتواند یک مقدار برگشتی نیز داشته باشد.  این درحالیاست که میتواند صرفا یک فرآیند را اجرا کند، بدون اینکه خروجی داشته باشد. بهعبارتی دیگر اگر فرآیندی داشته باشیم که در نهایت یک شناسه را برمیگرداند، از Task<int> و اگر فرآیندی داشته باشیم که صرفا فرآیند همگام سازی دادههای قدیمی به جدید را انجام میدهد، میتواند از نوع Task باشد. همانطور که اشاره شد، Task یک کلاس است که شامل متدها و فیلدهای مختلفی میباشد. با استفاده از این اعضا میتوان نحوهی اجرای کدها و وضعیتهای مختلف اجرای آن را مدیریت کرد، تا در نهایت اجرای آن کام

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

دات نت 7 به همراه یک Regex Source Generator توکار است که به کمک آن میتوان عبارات باقاعده را تبدیل به کدهای سیشارپ معادل آنها کرد و پیش از اجرای برنامه، آنها را کامپایل و جزئی از خروجی نهایی نمود. این روش نسبت به روش پیشین تولید کدهای معادل عبارات باقاعده در زمان اجرای برنامه، از مزایای زیر برخوردار است: - اجرای یک عبارت باقاعده سریعتر خواهد شد. در این حالت دیگر نیازی نیست تا در حین اجرای برنامه، منتظر پردازش و تولید کدهای سیشارپ معادل آن شد. - کدهای تولیدی پیش از کامپایل برنامه، از مزایای بهینه سازی ویژهای برخوردار میشوند که پیشتر تنها با ذکر پرچم RegexOptions.Compiled در زمان اجرا میسر میشدند. - بعضی از سکوهای کاری مانند iOS، از تولید کد در زمان اجرای برنامه پشتیبانی نمیکنند. در این حالت یک تولید کنندهی کد سیشارپ معادل در زمان کامپایل برنامه، حداکثر کارآیی را برای اینگونه سکوهای کاری به ارمغان میآورد. - امکان مطالعهی کدهای سیشارپ تولیدی معادل یک عبارت باقاعده، برای اولین بار پیش از اجرای برنامه میسر شدهاست. - کدهای تولیدی معادل، قابلیت دیباگ دارند. - میتوان با مطالعهی این کدها، نکات جدیدی را فرا گرفت! چه عبارت باقاعدهای را میتوان به Regex source generators تبدیل کرد؟ برای استفاده از این تولید کنندهی کدهای معادل عبارات باقاعده، باید از NET 7. و C# 11 استفاده کرد. همچنین تمام پارامترهای Regex تعریف شده نیز باید ثابت باشند. برای نمونه در دو مثال زیر، در اولی، patte ثابت است و در دومی هم patte و هم سایر تنظیمات ذکر شده؛ بنابراین قابلیت تبدیل به روش استفاده از تولید کنندههای کد را دارند: if(new Regex("[a-z]+").IsMatch("abc")){} if(Reg

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

این روش منحصر به Nop نیست و امکان استفادهی از آن بر روی هر سورس دیگری نیز وجود دارد. همچنین اگر در رابطه با NopCommerce اطلاعاتی ندارید، میتوانید از اینجا جهت آشنا شدن با این فروشگاه ساز Asp.net core استفاده کنید. همانطور که در جریان هستید، برای اینکه بحث DI را در پروژه داشته باشیم، باید به ازای هر سرویس مشخص کنیم که کدام اینترفیس، به کدام کلاس، map شود. به بیان دیگر باید مشخص کرد هر وقت یک شیء از Container درخواست شد، از چه کلاسی باید این شیء ساخته شود؛ در عینحال باید LifeTime وجود شیء در حافظه نیز مشخص شود. حال تصور کنید تعداد سرویسهای شما در حال زیاد شدن است. در این حالت مجبور هستید دائما این سرویسها را ثبت کنید؛ علاوه بر اینکه باید کدهای تکراری را جهت تعریف این سرویسها بنویسید و باید بهخاطر بسپارید که سرویس جدید را ثبت کنید. در این مقاله تلاش بر این است تا دیگر نیازی به تعریف کردن تک تک سرویسها نباشد؛ بهطوری که با رعایت دو قانون کلی بتوان سرویسها را به صورت خودکار ثبت کرد. مراحل پیاده سازی  یک اینترفیس را به اسم ICustomService ایجاد کردم که  یک Prop به اسم InjectType دارد و مشخص میکند به چه صورتی این سرویس به ServiceCollection تزریق شود. از طرفی با استفاده از Order، الویت اضافه شدن سرویس به ServiceCollection را مشخص میکنیم و در نهایت با ImplementationType مشخص میکنیم سرویسی که اضافه شده، باید به یک اینترفیس Map شود یا خیر؟ اما مهمتر از اینکه ویژگیهای تزریق وابستگی مشخص شود، مشخص میکند چه سرویسهایی توسط ما اضافه شدهاند و از سرویسهای nop تفکیک میشوند. namespace Nop.Services { public interface ICustomSer

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

دات نت 7 به همراه دو متد جدید Order و OrderDescending است که مرتب سازی مجموعههای ساده را انجام میدهند. روش متداول مرتب سازی مجموعههای ساده تا پیش از دات نت 7 فرض کنید لیستی از اعداد را داریم: var numbers = new List<int> { -7, 1, 5, -6 }; تا پیش از دات نت 7 با استفاده از متدهای OrderBy و OrderByDescending موجود به همراه LINQ، امکان مرتب سازی صعودی و نزولی این لیست وجود دارد: var sortedNumbers1 = numbers.OrderBy(n => n); var sortedNumbers2 = numbers.OrderByDescending(n => n); که در اینجا ذکر پارامتر keySelector ضروری است: public static IOrderedEnumerable<TSource> OrderBy<TSource,TKey>( [NotNull] this IEnumerable<TSource> source, [NotNull] Func<TSource,TKey> keySelector) هرچند میشد طراحی آن سادهتر باشد و حداقل برای مجموعههای ساده، نیازی به ذکر آن نباشد. روش جدید مرتب سازی مجموعههای ساده در دات نت 7 دات نت 7 به همراه دو متد جدید Order و OrderDescending است که دیگر نیازی به ذکر پارامتر keySelector ذکر شده را ندارند: var sortedNumbers3 = numbers.Order(); var sortedNumbers4 = numbers.OrderDescending(); و امضای آنها به صورت زیر است: public static IOrderedEnumerable<T> Order<T>(this IEnumerable<T> source) public static IOrderedEnumerable<T> OrderDescending<T>(this IEnumerable<T> source) که در حقیقت دو متد الحاقی جدید قابل اعمال بر روی انواع و اقسام IEnumerableها هستند. در مورد سایر مجموعههای پیچیده چطور؟ فرض کنید کلاس User را: public class User { public string Name {

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

LINQ یا همان Language-Integrated Query، یک زبان سادهی کوئری نوشتن یکپارچهی با دات نت است. به کمک آن میتوان اعمال پیچیدهای را بر روی اشیاء، به زبانی ساده بیان کرد و امروزه تقریبا توسط تمام توسعه دهندگان دات نت مورد استفاده قرار میگیرد. اما ... این سادگی، بهایی را نیز به همراه دارد: کمتر بودن سرعت اجرا و همچنین افزایش مصرف حافظه. با توجه به گستردگی استفادهی از LINQ، اگر بهبودی در این زمینه حاصل شود، بر روی کارآیی تمام برنامههای دات نتی تاثیر خواهد گذاشت و این امر در دات نت 7 محقق شدهاست. کارآیی متدهای LINQ to Objects در دات نت 7 (مانند متدهای Enumerable.Max, Enumerable.Min, Enumerable.Average, Enumerable.Sum) به شدت افزایش یافته و این افزایش گاهی حتی بیشتر از 10 برابر نسبت به نگارشهای قبلی دات نت است؛ اما چگونه به چنین کارآیی رسیدهاند؟ تدارک یک آزمایش برای بررسی میزان افزایش کارآیی متدهای LINQ در دات نت 7 در ادامه یک آزمایش سادهی بررسی کارآیی متدهای Enumerable.Max, Enumerable.Min, Enumerable.Average, Enumerable.Sum را با استفاده از کتابخانهی معروف BenchmarkDotNet مشاهده میکنید: using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Ruing; using System.Collections.Generic; using System.Linq; [MemoryDiagnoser(displayGenColumns: false)] public partial class Program { static void Main(string[] args) => BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args); [Params (10, 10000)] public int Size { get; set; } private IEnumerable<int> items; [GlobalSetup] public void Setup() { items = Enumerable.Range(1, Size).To

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

استفادهی از Reflection در زیر ساختهای دات نت و ASP.NET Core، بسیار گستردهاست؛ به همین جهت هرگونه بهبود کارآیی در این زمینه، نه فقط بر روی خود فریمورک، بلکه تمام برنامههایی که از آن استفاده میکنند هم تاثیر گذار است. از این لحاظ دات نت 7 شاهد تغییرات گستردهای است تا حدی که کارآیی برنامههای مبتنی بر دات نت 7 ای که از Reflection استفاده میکنند، نسبت به نگارشهای قبلی دات نت، حداقل 2 برابر شدهاست و این برنامهها تنها کاری را که باید انجام دهند، صرفا تغییر target framework مورد استفادهی در آنها به نگارش جدید است. در این مطلب نحوهی رسیدن به این کارآیی بالاتر را بررسی خواهیم کرد. تدارک یک آزمایش برای بررسی میزان افزایش کارآیی Reflection در دات نت 7 یک برنامهی کنسول جدید را ایجاد کرده و سپس کلاس Person را به صورت زیر به آن اضافه میکنیم: namespace NET7Reflection; public class Person { private int _age; inteal Person(int age) => _age = age; private int GetAge() => _age; private void SetAge(int age) => _age = age; } همانطور که مشاهده میکنید، سازندهی این کلاس، inteal است و همچنین دو متد private هم دارد که اگر بخواهیم از آن در جای  دیگری استفاده کنیم، یکی از روشهای متداول جهت دسترسی به این امکانات خصوصی، استفاده از Reflection است. به همین جهت ابتدا کتابخانهی BenchmarkDotNet را با TargetFramework دات نت 7 به صورت زیر به پروژه اضافه میکنیم: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net7.0</TargetFramework> <Implicit

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

بالاخره تفاوت کارآیی بین حلقههای for و foreach در دات نت 7 برطرف شدهاست که این مورد نیز یکی دیگر از دلایل بهبود کارآیی LINQ در دات نت 7 است. در این مطلب به همراه آزمایشی، این مورد را بررسی خواهیم کرد. تدارک یک آزمایش برای بررسی کارآیی حلقههای for و foreach در دات نت 7 یک برنامهی کنسول جدید را ایجاد کرده و سپس کتابخانهی BenchmarkDotNet را با TargetFramework دات نت 7 به صورت زیر به پروژه اضافه میکنیم: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net7.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="BenchmarkDotNet" Version="0.13.4" /> </ItemGroup> </Project> در ادامه به این پروژه، کلاس زیر را اضافه میکنیم: using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Jobs; namespace NET7Loops; [SimpleJob(RuntimeMoniker.Net60)] [SimpleJob(RuntimeMoniker.Net70)] [MemoryDiagnoser(false)] public class Benchmarks { private int[] ItemsArray; private List<int> ItemsList; [GlobalSetup] public void Setup() { var random = new Random(420); var randomItems = Enumerable.Range(0, 1000).Select(_ => random.Next()); ItemsArray = randomItems.ToArray(); ItemsList = randomItems.ToList(); } [Benchmark] public void For_Array() { for (var i =

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

ASP.NET MVC از روش بکارگیری binding providerها برای تدارک زیرساخت model binding استفاده میکند که در این روش، دادههای پارامترهای یک action method از طریق هدرها، کوئری استرینگها، بدنهی درخواست و غیره تهیه میشوند. در حالت پیشفرض اگر این پارامترها از نوعهای سادهای مانند اعداد و یا DateTime تشکیل شده باشند و یا به همراه یک TypeConverter باشند که امکان تبدیل این رشته را به آن نوع خاص بدهد، به صورت خودکار bind خواهند شد و هر نوع دیگری، به صورت یک نوع پیچیده درنظر گرفته میشود. نوع پیچیده یعنی bind برای مثال اطلاعات بدنهی درخواست به تک تک خواص آن نوع. برای نمونه در کنترلر زیر: [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching", }; // /WeatherForecast/GetForecast2?from=1&to=3 [HttpGet("[action]")] public IEnumerable<WeatherForecast> GetForecast2(Duration days) { retu Enumerable.Range(days.From, days.To) .Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)],

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 10 بهمن 1401 ساعت: 21:29

صفحه بندی

خبرنامه